<template><div><h2 id="zookeeper集群中服务器之间是怎样通信的" tabindex="-1"><a class="header-anchor" href="#zookeeper集群中服务器之间是怎样通信的"><span>Zookeeper集群中服务器之间是怎样通信的</span></a></h2>
<p>Zookeeper集群中的服务器之间使用TCP协议进行通信</p>
<h2 id="zab协议和paxos算法的联系和区别是什么" tabindex="-1"><a class="header-anchor" href="#zab协议和paxos算法的联系和区别是什么"><span>ZAB协议和Paxos算法的联系和区别是什么</span></a></h2>
<p>ZAB（Zookeeper Atomic Brodcast）算法和Paxos算法都是分布式系统中用于实现<strong>数据一致性</strong>的算法。</p>
<p>两者的主要联系在于它们都采用了类似领导者的选举机制，通过多数派的投票来保证系统的稳定性。</p>
<p>在ZAB中，这体现在它使用了一种类似与Paxos的领导者选举过程，其中有一个领导者（Leader）来协调多个跟随者（Follower）的操作。
在Paxos中，一个提案需要被大多数的进程接受并返回结果，才能被确定。</p>
<p>两者的区别在于它们的目标和实现方式不同：</p>
<ol>
<li>目标：ZAB算法是为了构建一个<strong>高可用的分布式数据主备系统</strong>（如Zookeeper），而Paxos算法则是为了构建一个分<strong>布式一致性状态机系统</strong>。</li>
<li>实现方式：ZAB使用了消息广播的方式来实现分布式系统的协调，它要求每个消息都必须得到大多数节点的反馈才能确认，从而确保消息的一致性。同时，ZAB算法还引入了一个虫咬的概念，即消息的epoch，用来保证领导者出现故障时，能够正常地选举新的领导者。
Paxos算法则是更加通用，它可以处理更广泛的一致性问题，而不仅仅是消息广播。然而，Paxos算法的实现较为复杂，因为它需要处理多种可能的情况，包括领导者故障、消息丢失等。</li>
</ol>
<h2 id="zookeepr是如何解决脑裂问题的" tabindex="-1"><a class="header-anchor" href="#zookeepr是如何解决脑裂问题的"><span>Zookeepr是如何解决脑裂问题的？</span></a></h2>
<p>Zookeeper的解决方案是通过<strong>过半机制</strong>来避免脑裂问题的发生。
Zookeeper脑裂是指一个集群环境中出现了多个Mastger节点，导致数据不一致的问题。这种情况通常发生在网络故障导致集群中部分节点失去与Mseter节点的连接，所以重新选举节点，在这过程中，可能会出现多个Master节点，导致脑裂问题。</p>
<p><strong>解决方案：</strong></p>
<ol>
<li>增加网络稳定性，避免网络故障导致的问题。</li>
<li>调整Zookeeper集群的选举机制和超时设置，使其更适应网络环境和集群架构。</li>
<li>及时发现并处理多个Master节点，避免数据不一致和其他问题的发生。</li>
</ol>
<h2 id="说说zookeeper的cap问题上的取舍" tabindex="-1"><a class="header-anchor" href="#说说zookeeper的cap问题上的取舍"><span>说说Zookeeper的CAP问题上的取舍？</span></a></h2>
<p>Zookeeper在CAP问题上选择了CP，也就是说，在一致性和可用性之间，Zookeeper选择了强一致性。</p>
<p>Zookeeper是一个分布式协调服务，它的主要职责是维护整个系统的状态，并提供一致性的服务。</p>
<h2 id="说说zookeeper的持久化机制" tabindex="-1"><a class="header-anchor" href="#说说zookeeper的持久化机制"><span>说说Zookeeper的持久化机制</span></a></h2>
<ol>
<li><strong>内存存储</strong></li>
<li><strong>磁盘存储</strong></li>
</ol>
<h2 id="zookeeper的典型应用场景" tabindex="-1"><a class="header-anchor" href="#zookeeper的典型应用场景"><span>Zookeeper的典型应用场景</span></a></h2>
<ol>
<li><strong>数据发布与订阅</strong></li>
<li><strong>分布式锁</strong></li>
<li><strong>集群管理</strong></li>
<li><strong>分布式协调</strong></li>
<li><strong>命名服务</strong></li>
</ol>
<h2 id="zookeeper的分布式锁如何实现" tabindex="-1"><a class="header-anchor" href="#zookeeper的分布式锁如何实现"><span>Zookeeper的分布式锁如何实现</span></a></h2>
<p>思路：利用Zookeeper的<strong>临时顺序节点唯一性和顺序性</strong>的特点来实现。</p>
<ol>
<li>创建一个Zookeeper节点作为锁的根节点，例如/locks。</li>
<li>当一个线程需要获取锁是，它在锁的根节点下创建一个临时顺序节点，例如/locks/lick-001，并尝试获取锁。</li>
<li>线程获取锁的过程是通过检查它创建的节点是否是锁节点下最小的节点，如果是，则表示该线程获得了锁；否则，线程监听它创建节点的前一个节点，等待前一个节点的释放。</li>
<li>当线程释放锁时，它删除自己创建的节点。</li>
</ol>
<p>这种方式实现的分布式锁具有一定可靠性和性能，但需要确保Zookeeper集群的可用性和性能足够好。同时，需要处理连接断开、会话过期等异常情况，以保证但不是锁的正确性。此外，还可以使用Zookeeper的超时机制来处理死锁等问题。</p>
<h2 id="为什么zookeeper集群的数目一般为奇数个" tabindex="-1"><a class="header-anchor" href="#为什么zookeeper集群的数目一般为奇数个"><span>为什么Zookeeper集群的数目一般为奇数个？</span></a></h2>
<ol>
<li>防止脑裂。</li>
<li>便于选举。</li>
</ol>
<h2 id="zookeeper对节点的watch监听通知时永久的吗" tabindex="-1"><a class="header-anchor" href="#zookeeper对节点的watch监听通知时永久的吗"><span>Zookeeper对节点的watch监听通知时永久的吗？</span></a></h2>
<p><strong>在Zookeeper中，节点监视（watch）通知不是永久的，而是一次性触发</strong>。</p>
<h2 id="说说zab协议" tabindex="-1"><a class="header-anchor" href="#说说zab协议"><span>说说ZAB协议</span></a></h2>
<p>ZAB协议（Zookeeper Atomic Broadcast）是Zookeeper中用于实现分布式一致性的协议。该协议旨在确保分布式系统中的数据一致性和可靠性，并具有以下特点：</p>
<ol>
<li>支持崩溃恢复和消息广播</li>
<li>原子性保证</li>
<li>一致性保证</li>
</ol>
<h4 id="zab协议包括三个阶段" tabindex="-1"><a class="header-anchor" href="#zab协议包括三个阶段"><span>ZAB协议包括三个阶段：</span></a></h4>
<ol>
<li>准备阶段（Prepare）：Leader节点准备数据并通知所有Follower节点。</li>
<li>确认阶段（Confirm）：Follower节点接收准备消息并准备自己所在的服务，并回复确认消息。</li>
<li>广播阶段（Broadcast）：Leader节点将数据广播给所有Follower节点。</li>
</ol>
<p>如果在确认阶段，Follower节点没有收到确认信息，那么会进入崩溃恢复模式，重新选举Leader节点。ZAB协议是实现分布式一致性和协调服务的核心协议之一。</p>
<h2 id="zookeeper的通知机制是什么" tabindex="-1"><a class="header-anchor" href="#zookeeper的通知机制是什么"><span>Zookeeper的通知机制是什么</span></a></h2>
<h2 id="zookeeper集群中是怎么选举leader的" tabindex="-1"><a class="header-anchor" href="#zookeeper集群中是怎么选举leader的"><span>Zookeeper集群中是怎么选举leader的</span></a></h2>
<h2 id="zookeeper节点宕机如何处理" tabindex="-1"><a class="header-anchor" href="#zookeeper节点宕机如何处理"><span>Zookeeper节点宕机如何处理</span></a></h2>
<h2 id="zookeeper是如何保证事务的顺序一致性的" tabindex="-1"><a class="header-anchor" href="#zookeeper是如何保证事务的顺序一致性的"><span>Zookeeper是如何保证事务的顺序一致性的</span></a></h2>
<ol>
<li><strong>事务的严格串行化</strong></li>
<li><strong>锁定机制</strong></li>
</ol>
<h2 id="zookeeper集群数据是如何同步的" tabindex="-1"><a class="header-anchor" href="#zookeeper集群数据是如何同步的"><span>Zookeeper集群数据是如何同步的</span></a></h2>
</div></template>


